package co.edu.javeriana.touresbalon.oms.services;

import co.edu.javeriana.touresbalon.oms.entities.Address;
import co.edu.javeriana.touresbalon.oms.entities.Customer;
import co.edu.javeriana.touresbalon.oms.entities.Orders;
import java.util.ArrayList;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

/**
 *
 * @author ada
 */
@Stateless
public class ClientesBeanService implements ClientesBeanServiceLocal {

    @PersistenceContext(unitName = "TouresBalon_OMS-ejbPU")
    EntityManager manager;

    @Override
    public boolean creacionCliente(Customer cliente) {
        Customer existeCliente = manager.find(Customer.class, cliente.getCustid());
        try {
            if (existeCliente == null) {
                //Creacion
                if (cliente.getAddressList() == null) {
                    cliente.setAddressList(new ArrayList<Address>());
                }
                if (cliente.getOrdersList() == null) {
                    cliente.setOrdersList(new ArrayList<Orders>());
                }
                manager.persist(cliente);
                return true;
            } else {
                //Actualizacion. Si algun campo no viene se conserva el anterior.
                existeCliente.setAddressList(cliente.getAddressList() != null && !cliente.getAddressList().isEmpty() ? cliente.getAddressList():existeCliente.getAddressList());
                existeCliente.setEmail(cliente.getEmail() != null && !cliente.getEmail().isEmpty() ? cliente.getEmail():existeCliente.getEmail());
                existeCliente.setFname(cliente.getFname() != null && !cliente.getFname().isEmpty() ?  cliente.getFname():existeCliente.getFname());
                existeCliente.setLname(cliente.getLname() != null && !cliente.getLname().isEmpty() ?  cliente.getLname():existeCliente.getLname());
                existeCliente.setOrdersList(cliente.getOrdersList() != null && !cliente.getOrdersList().isEmpty()  ? cliente.getOrdersList():existeCliente.getOrdersList());
                existeCliente.setPassword(cliente.getPassword() != null && !cliente.getPassword().isEmpty() ? cliente.getPassword():existeCliente.getPassword());
                existeCliente.setPhonenumber(cliente.getPhonenumber() != null && !cliente.getPhonenumber().isEmpty() ?cliente.getPhonenumber():existeCliente.getPhonenumber());
                existeCliente.setStatus(cliente.getStatus() != null && !cliente.getStatus().isEmpty() ? cliente.getStatus():existeCliente.getStatus());
                return true;
            }
        } catch (Exception ex) {
            ex.printStackTrace();
            return false;
        }

    }

    @Override
    public Customer autenticacionCliente(String id, String password) {
        Query query = manager.createNamedQuery("Customer.findByIdAndPassword");
        query.setParameter("custid", id);
        query.setParameter("password", password);
        try {
            Customer authenticatedCustomer=(Customer) query.getSingleResult();
            return authenticatedCustomer;
        } catch (NoResultException ex) {
            return null;
        }

    }
}
